package com.mall.controller;

import com.alibaba.fastjson.JSON;
import com.mall.beans.Dto;
import com.mall.beans.User;
import com.mall.beans.vo.UserVo;
import com.mall.util.RedisUtil;
import com.mall.util.TokenUtil;
import com.mall.service.UserService;
import com.mall.util.DtoUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

/**
 * 用户表(User)表控制层
 *蔡文智
 * @author xiao
 * @since 2020-12-21 16:49:58
 */
@RestController
@RequestMapping("user")
public class UserController {
    /**
     * 服务对象
     */
    @Resource
    private UserService userService;

    @Autowired
    private TokenUtil tokenUtil;

    @Autowired
    private RedisUtil redisUtil;


    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("selectOne")
    public Dto selectOne(Integer id) {
        return DtoUtil.returnOk(userService.queryById(id));
    }
    /**
     * 用户注册（根据loginName,password创建）
     * @param user
     * @return
     */
    @PostMapping("add")
    public Dto add(@RequestBody User user) {
        System.out.println(user.getLoginName());
        return DtoUtil.returnOk(userService.add(user));
    }

    /**
     * 通过ID查询单条数据
     *
     * @param userId 主键
     * @return 实例对象
     */
    @GetMapping("queryById")
    public Dto queryById(Integer userId) {
        return DtoUtil.returnOk(userService.queryById(userId));
    }


    @PostMapping("login")
    public Dto login(@RequestBody User user, HttpServletRequest request){
        /**
         * User u = userService.login(user);
         * 根据登录名和密码来获取对应user
         * user里只有loginName和password
         * u里有用户必有的属性（用户ID、登录名、密码）
         */
        User u = userService.login(user);
        System.out.println(u.getLoginName());
        System.out.println(user.getLoginName());
        if(u == null){
            return DtoUtil.returnError(5001,"用户名或密码为空");
        }else {
            if (u.getPassword().equals(user.getPassword())){
                String agent = request.getHeader("user-agent");
                UserVo  uv = new UserVo();
                try{
                    String token =tokenUtil.token(agent,user.getLoginName());
                    u.setPassword("");
                    redisUtil.setStr(token, JSON.toJSONString(u));

                    uv.setLoginName(u.getLoginName());
                    uv.setUserId(u.getUserId());
                    uv.setUserImg(u.getUserImg());
                    uv.setUserName(u.getUserName());
                    uv.setToken(token);
                }catch (Exception e){
                    e.printStackTrace();
                }
                return DtoUtil.returnOk(uv);
            }else {
                return DtoUtil.returnError(5002,"密码错误");
            }
        }
    }


    /**
     * 添加资料（根据loginName,password创建）
     * @param user
     * @return
     */
    @PostMapping("data")
    public Dto data(User user){
        return DtoUtil.returnOk(userService.data(user));
    }




}

